Activation codes are codes that may be used to activate software, devices, features, coupons, or other entities at a computer. Activation codes are typically random alphanumeric strings generated at a server computer. Activation codes may be stored in a database and shared with a user. The user may then send the activation code to the server computer, which may verify that the activation code matches the code stored in the database. If so, the server computer may activate the software, device, feature, or other entity associated with the activation code. Otherwise, no activation may be performed.
Activation codes are widely utilized, but the infrastructure required to support their use is significant. For example, an activation code database is required to store all generated activation codes. Such a database may require significant amounts of computer storage and processing capabilities. Verification of activation codes requires querying the database, which requires additional network bandwidth and processing capabilities. In addition, if data is to be associated with an activation code, for example user data, the data also needs to be stored in the activation code database, further increasing storage requirements.
It may be desirable to share activation codes among multiple parties. For example, an encoding party generating an activation code and sending it to a user may want to enable a decoding party to verify the activation code. However, doing so may increase processing and network requirements substantially. For example, duplicating the activation code database requires both the encoding party and the decoding party to store the entire database and the decoding party to update the database on each change made by the encoding party. Alternately, the encoding party may allow the decoding party to query the activation code database, but this may increase network traffic for both the encoding and decoding parties, and may introduce insecurities to the encoding party network. Further, if the encoding party and the decoding party are not mutually accessible, such sharing may be impossible.
Embodiments of the invention address these and other problems.